// part1:C13:ex13.58.cpp
// class Foo.
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

class Foo 
{
public:
    Foo sorted() &&;
    Foo sorted() const &;
private:
    vector<int> data;
};

Foo Foo::sorted() &&
{
    cout << "right value referencee" << endl;
    sort(data.begin(), data.end());
    return *this;
}

Foo Foo::sorted() const &
{
    cout << "left value referencee" << endl;
    Foo ret(*this);
    return ret.sorted();
    // return Foo(*this).sorted();
}

int main(int argc, char **argv)
{
    Foo f;
    f.sorted();
    return 0;
}
